class Person(object):
    """
    这里是类的文档，调用__doc__方法是打印这里！！！
    这是一个 人 类，有name和age
    """
##基础函数
    def __new__(cls, name, age):   #__new__方法是在实例的时候运行的第一个方法，我认为其作用是对传入的参数进行一些限制，或者是用于继承一个不可变的类型比如一个 tuple 或者 string
        name = str(name)
        age = int(age)
        return object.__new__(cls)  #在最后要将这和实例返回出去，否则__init__方法就无法接收到self这个参数

    def __init__(self, name, age):   #初始化类
        self.name = name
        self.age = age
        print("在创建对象的时候调用这个方法，你输入的 %s 和 %s 会显示在这里" % (self.name, self.age))

    def __del__(self):     # 销毁对象的时候，一般将保存文件之类的操作写在del里
        print("当你看到我时，你对象就没啦~！")

    def __call__(self, *args, **kwargs):  #可以将对象当作函数来调用，具体方法为  对象（） 调用的时候会打印这个方法里的东西
        print("当你看到我的时，说明我已经被当作函数来调用了~")

    def __str__(self):   #希望将实例不用函数的形式表现出来，用__str__方法 print(mike) 可以显示方法里return 的东西
        return '我叫%s今年%s' % (self.name, self.age)

##mike = Person('mike', 18)
##mike()
##del mike
##print(mike.__doc__) #查看函数文档
##print(mike.__module__) #查看类所在模块  __main__主模块 当前模块
##print(mike.__class__) #查看函数类
##print(mike.__dict__)   #查看字典，所有的属性和方法
##print(mike)



##算数运算：
class Calculation(int):
    def __new__(cls, other):  
        other = int(other)
        return int.__new__(cls, other)
    def __add__(self, other):  #加法
        return int.__add__(self, other)
    def __sub__(self, other):   #减法
        return int.__sub__(self, other)


a = Calculation(1)
b = Calculation(2)
print(a + b)
print(a - b)
"""
__add__(self, other)	定义加法的行为：+
__sub__(self, other)	定义减法的行为：-
__mul__(self, other)	定义乘法的行为：*
__truediv__(self, other)	定义真除法的行为：/
__floordiv__(self, other)	定义整数除法的行为：//
__mod__(self, other)	定义取模算法的行为：%
__divmod__(self, other)	定义当被 divmod() 调用时的行为
__pow__(self, other[, modulo])	定义当被 power() 调用或 ** 运算时的行为
__lshift__(self, other)	定义按位左移位的行为：<<
__rshift__(self, other)	定义按位右移位的行为：>>
__and__(self, other)	定义按位与操作的行为：&
__xor__(self, other)	定义按位异或操作的行为：^
__or__(self, other)	定义按位或操作的行为：|
"""

        
 
